package name.abuchen.portfolio.ui.wizards.splits; import org.eclipse.core.databinding.DataBindingContext; import org.eclipse.core.databinding.beans.BeanProperties; import org.eclipse.jface.databinding.swt.WidgetProperties; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.layout.TableColumnLayout; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import name.abuchen.portfolio.model.Security; import name.abuchen.portfolio.model.SecurityPrice; import name.abuchen.portfolio.money.Values; import name.abuchen.portfolio.ui.Messages; import name.abuchen.portfolio.ui.wizards.AbstractWizardPage; public class PreviewQuotesPage extends AbstractWizardPage { private class TransactionLabelProvider extends LabelProvider implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { SecurityPrice p = (SecurityPrice) element; switch (columnIndex) { case 0: return Values.Date.format(p.getTime()); case 1: return Values.Quote.format(p.getValue()); case 2: if (model.isChangeHistoricalQuotes() && p.getTime().isBefore(model.getExDate())) { long shares = p.getValue() * model.getOldShares() / model.getNewShares(); return Values.Quote.format(shares); } return null; default: return null; } } } private StockSplitModel model; private TableViewer tableViewer; public PreviewQuotesPage(StockSplitModel model) { super("preview-prices"); //$NON-NLS-1$ setTitle(Messages.SplitWizardReviewQuotesTitle); setDescription(Messages.SplitWizardReviewQuotesDescription); this.model = model; } @Override public void beforePage() { Security security = model.getSecurity(); tableViewer.setInput(security.getPrices()); } @Override public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); setControl(container); GridLayoutFactory.fillDefaults().numColumns(1).applyTo(container); Button checkbox = new Button(container, SWT.CHECK); checkbox.setText(Messages.SplitWizardLabelUpdateQuotes); Composite tableContainer = new Composite(container, SWT.NONE); GridDataFactory.fillDefaults().grab(true, true).applyTo(tableContainer); TableColumnLayout layout = new TableColumnLayout(); tableContainer.setLayout(layout); tableViewer = new TableViewer(tableContainer, SWT.BORDER); Table table = tableViewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); TableColumn column = new TableColumn(tableViewer.getTable(), SWT.None); column.setText(Messages.ColumnDate); layout.setColumnData(column, new ColumnPixelData(80, true)); column = new TableColumn(tableViewer.getTable(), SWT.RIGHT); column.setText(Messages.ColumnCurrentQuote); layout.setColumnData(column, new ColumnPixelData(80, true)); column = new TableColumn(tableViewer.getTable(), SWT.RIGHT); column.setText(Messages.ColumnUpdatedQuote); layout.setColumnData(column, new ColumnPixelData(80, true)); tableViewer.setLabelProvider(new TransactionLabelProvider()); tableViewer.setContentProvider(ArrayContentProvider.getInstance()); // bindings DataBindingContext context = new DataBindingContext(); context.bindValue(WidgetProperties.selection().observe(checkbox), // BeanProperties.value("changeHistoricalQuotes").observe(model)); //$NON-NLS-1$ checkbox.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { tableViewer.refresh(); } }); } }